package pers.myutil.local.conversion.date;

import pers.myutil.throwable.local.MyUtilLocalException;

import java.util.Calendar;
import java.util.Date;

/**
 * 时间转换
 * Created by lym on 2017/7/21.
 */
public class TimeConversion {

    /**
     * 修改时间
     * @param date 基础时间
     * @param year 年
     * @param month 月
     * @param day 日
     * @param hour 时
     * @param minute 分
     * @param second 秒
     * @return 更新后的时间
     */
    public static  Date modificationDate(Date date,int year,int month,int day,int hour,int minute,int second) throws MyUtilLocalException {
        if(date == null){
            throw new MyUtilLocalException("时间不能为空！");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //修改年
        calendar.add(Calendar.YEAR,year);
        //修改月
        calendar.add(Calendar.MONTH,month);
        //修改日
        calendar.add(Calendar.DATE,day);
        //修改时
        calendar.add(Calendar.HOUR,hour);
        //修改分
        calendar.add(Calendar.MINUTE,minute);
        //修改秒
        calendar.add(Calendar.SECOND,second);
        return calendar.getTime();
    }

    /**
     * 修改天数
     * @param date 基础时间
     * @param day 修改的天数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifyDay(Date date,int day) throws MyUtilLocalException {
        if(day == 0) {
            throw new MyUtilLocalException("修改的天数不能为空！");
        }
        return TimeConversion.modificationDate(date,0,0,day,0,0,0);
    }

    /**
     * 修改年数
     * @param date 基础时间
     * @param year 修改的年数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifyYear(Date date,int year) throws MyUtilLocalException {
        if(year == 0) {
            throw new MyUtilLocalException("修改的年数不能为空！");
        }
        return TimeConversion.modificationDate(date,year,0,0,0,0,0);
    }

    /**
     * 修改月数
     * @param date 基础时间
     * @param month 修改的月数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifyMonth(Date date,int month) throws MyUtilLocalException {
        if(month == 0) {
            throw new MyUtilLocalException("修改的月数不能为空！");
        }
        return TimeConversion.modificationDate(date,0,month,0,0,0,0);
    }

    /**
     * 修改小时数
     * @param date 基础时间
     * @param hour 修改的小时数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifyHour(Date date,int hour) throws MyUtilLocalException {
        if(hour == 0) {
            throw new MyUtilLocalException("修改的小时数不能为空！");
        }
        return TimeConversion.modificationDate(date,0,0,0,hour,0,0);
    }

    /**
     * 修改分钟数
     * @param date 基础时间
     * @param minute 修改的分钟数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifyMinute(Date date,int minute) throws MyUtilLocalException {
        if(minute == 0) {
            throw new MyUtilLocalException("修改的分钟数不能为空！");
        }
        return TimeConversion.modificationDate(date,0,0,0,0,minute,0);
    }

    /**
     * 修改秒数
     * @param date 基础时间
     * @param second 修改的秒数
     * @return 修改后的时间
     * @throws MyUtilLocalException 时间异常
     */
    public static Date modifySecond(Date date,int second) throws MyUtilLocalException {
        if(second == 0) {
            throw new MyUtilLocalException("修改的秒数不能为空！");
        }
        return TimeConversion.modificationDate(date,0,0,0,0,0,second);
    }
}
